Lab 06 - SLAM 3D
Lab. 06 - SLAM 3D
1. Lokalizacja 2D a 3D
| Lokalizacja 2D | Lokalizacja 3D |
|---|---|
|
|
Różnice między odometrią, a mapowaniem:
- Odometria pracuje na punktach z różnych chwil czasowych, mapowanie na punktach przeliczonych do jednego, wspólnego momentu czasowego.
- Odometria dopasowywuje skan do skanu, mapowanie skan do mapy (zbioru skanów).
- Odometria jest szybsza (± stały czas), mapowanie może być czasochłonne (mapa rośnie).
2. Cel zajęć
Celem tych zajęć będzie uruchomienie lokalizacji 3D z wykorzystaniem skanera laserowego dla robota mobilnego.
3. Przygotowanie środowiska
Przed przystąpieniem do pracy należy przygotować środowisko: Instrukcja przygotowania środowiska do zajęć.
Domyślnie kontener nosi nazwę ARM_06.
UWAGA! Skrypty po uruchomieniu usuwają kontener o takiej nazwie przed utworzeniem nowego.
Korzystanie z kontenera
Po każdym ponownym uruchomieniu komputera, proszę pamiętać o wywoływaniu:
xhost +local:root
Nowy terminal można dołączyć do kontenera korzystając z polecenia:
docker exec -it ARM_06 bash
ROS_DOMAIN_ID
W przypadku pracy na wielu komputerach w tej samej sieci lokalnej
(eduroam też może tego wymagać), konieczne może być ustawienie
zmiennej środowiskowej ROS_DOMAIN_ID na różnych
wartościach. Należy wybrać dowolną liczbę całkowitą z zakresu 0-100.
Wartość tę należy ustawić w pliku ~/.bashrc:
export ROS_DOMAIN_ID=10 # przykładowa wartość
lub bezpośrednio w terminalu (wtedy będzie obowiązywać tylko w tym terminalu):
export ROS_DOMAIN_ID=10 # przykładowa wartość
Sugerowane jest użycie dwóch ostatnich cyfr numeru IP komputera jako
wartości ROS_DOMAIN_ID, aby uniknąć konfliktów z innymi
użytkownikami w sieci. Aby sprawdzić swój adres IP, można użyć
polecenia:
ip addr show
adres IP będzie widoczny przy interfejsie sieciowym, np.
wlan0 lub eth0.
Wygodne może być dodanie tego exportu do bashrc:
echo 'export ROS_DOMAIN_ID=<wybrana_wartość>' >> ~/.bashrc
4. ROS2 Bag
Podczas tych zajęć będziemy wykorzystywać ROS2 Bag. Jest to narzędzie służące do zapisu i odtwarzania danych z wielu topiców ROS2. Jest to pomocne podczas replikowania wyników eksperymentów i testów, a także przydatne podczas udostępniania swojej pracy innym, jako przykład. Popularne jest również wykorzystanie bagów do porównywania działania różnych systemów na tych samych danych.
Nagrywanie bagów
Dane z topiców można zapisać do baga korzystając z polecenia:
ros2 bag record <topic_name1> <topic_name2> [...] <topic_name_n>
np.
ros2 bag record /turtle1/cmd_vel /turtle1/pose
Przerwać nagrywanie można kombinacją klawiszy
Ctrl+C.
Możliwe jest również nadanie nazwy baga korzystając z flagi
-o, np.:
ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose
W powyższym przypadku topici /turtle1/cmd_vel oraz
/turtle1/pose zostaną zapisane do baga o nazwie
subset.
Odtwarzanie bagów
Odtworzyć baga można korzystając z polecenia:
ros2 bag play <bag_name>
Wszystkie wiadomości zapisane do baga zostaną odtworzone jednokrotnie, a następnie node publikujący zostanie zatrzymany.
Możliwe jest uruchomienie baga w pętli korzystając z flagi
-l. Rozpoczęcie odtwarzania od pauzy wymaga podania flagi
-p.
Kontrolę nad tempem odtwarzania baga umożliwia flaga -r
i podanie współczynnika, np.:
rosbag play -r 0.5 <bag_name> uruchomi odtwarzanie z
tempem równym połowie normalnego. Jest to przydatne przy przetwarzaniu
skomplikowanym obliczeniowo, jak np. SLAM 3D.
Informacje o bagu
Dane m.in. o topicach zapisanych w bagu można podejrzeć korzystając z
polecenia info:
ros2 bag info <bag_name>
Otrzymamy informacje takie jak rozmiar, czas trwania czy topici, które są zapisane.
5. Uruchomienie lidarslam_ros2
W tej instrukcji będziemy wykorzystywać paczkę lidarslam_ros2. Uruchomić system można następującym poleceniem:
cd /arm_ws
source install/setup.bash
ros2 launch lidarslam lidarslam.launch.py
Powinno pojawić się okno rviz2, w którym będzie wizualizowany przebieg lokalizacji i budowy mapy.
HDL_400
Kolejnym krokiem (w osobnym terminalu) będzie odtworzenie baga
zawierającego dane zarejestrowane na potrzeby
hdl_localization:
ros2 bag play -p -r 0.5 bags/hdl_400
Bag zostanie odtworzony zapauzowany i z rate wynoszącym
0.5 normalnego tempa.
Przed odpauzowaniem proszę jeszcze o dodanie do
podglądu danych typu PointCloud2 z topicu
/velodyne_points. Zawierają one “aktualne” odczyty z lidara.
Uruchomienie odtwarzania nastąpi po wciśnięciu klawisza
spacja z aktywnym terminalem, w którym odtwarzany jest
bag.
Proszę zwrócić uwagę na tworzoną mapę z topicu /map i z
topicu /modified_map. Czym mogą się różnić? A
/path i /modified_path?
Kitti 00
Na potrzeby zajęć zostało przygotowane również 200 pierwszych skanów z sekwencji 00 datasetu Kitti. Dane zawierają również informacje ground truth, które zostaną wykorzystane do (wizualnej) oceny działania systemu.
Przy ponownie uruchomionym lidarslam można uruchomić
baga:
ros2 bag play -p bags/kitti
Przed odpauzowaniem proszę jeszcze o dodanie do
podglądu danych typu Path z topicu /path_gt_lidar.
Sugeruję jeszcze zmienić kolor wizualizowania tych danych dla większej
czytelności (inny niż żółty i zielony). Po tym można odpauzować
baga.
Prawdopodobnie linia ground truth odbiega od ścieżki
zwracanej przez lidarslam. Proszę powtórzyć eksperyment dla
-r równego 0.3. Co się dzieje tym razem?
6. Zadanie do samodzielnej realizacji
Analizując dokumentację i kod źródłowy lidarslam oraz
obserwując działanie systemu proszę opisać wpływ następujących
parametrów z pliku
/arm_ws/src/lidarslam_ros2/lidarslam/param/lidarslam.yaml:
- ndt_resolution (scan_matcher i graph_based_slam)
- trans_for_mapupdate
- map_publish_period
- scan_period
- voxel_leaf_size
- loop_detection_period
- threshold_loop_closure_score
- distance_loop_closure
- range_of_searching_loop_closure
- search_submap_num
Dodatkowe materiały
Autorzy: Michał Nowicki, Kamil Młodzikowski